package com.dh.leetcode.five;


import org.junit.Assert;
import org.junit.Test;

/**
 * ClassName: _520_detect_capital
 *
 * @author shouzimu
 * @Description: 520. 检测大写字母
 * 我们定义，在以下情况时，单词的大写用法是正确的：
 * <p>
 * 全部字母都是大写，比如 "USA" 。
 * 单词中所有字母都不是大写，比如 "leetcode" 。
 * 如果单词不只含有一个字母，只有首字母大写， 比如 "Google" 。
 * 给你一个字符串 word 。如果大写用法正确，返回 true ；否则，返回 false 。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：word = "USA"
 * 输出：true
 * 示例 2：
 * <p>
 * 输入：word = "FlaG"
 * 输出：false
 * <p>
 * <p>
 * 提示：
 * <p>
 * 1 <= word.length <= 100
 * word 由小写和大写英文字母组成
 * <p>
 * <p>
 * <p>
 * 提示：
 * <p>
 * 1 <= word.length <= 100
 * word 由小写和大写英文字母组成
 * https://leetcode-cn.com/problems/detect-capital/
 * @date 2021/11/13 18:16
 */
public class _520_detect_capital {

    /**
     * 全大写或者全小写符合需求
     * 如果总长度-小写=1 说明只有1个大写字母，判断其是否首位即可
     * @param word
     * @return
     */
    public boolean detectCapitalUse(String word) {
        int len = word.length();
        int lowCount = 0;
        int uperCount = 0;

        for (int i = 0; i < len; i++) {
            char c = word.charAt(i);
            if ('a' <= c && c <= 'z') {
                lowCount++;
            } else {
                uperCount++;
            }
        }
        if (lowCount == len || uperCount == len) {
            return true;
        }
        char first = word.charAt(0);
        if (len - lowCount == 1 && 'A' <= first && first <= 'Z') {
            return true;
        }
        return false;
    }

    @Test
    public void detectCapitalUse() {
        Assert.assertEquals(true, detectCapitalUse("A"));
        Assert.assertEquals(true, detectCapitalUse("b"));
        Assert.assertEquals(true, detectCapitalUse("USA"));
        Assert.assertEquals(true, detectCapitalUse("Google"));
        Assert.assertEquals(false, detectCapitalUse("FlaG"));
        Assert.assertEquals(true, detectCapitalUse("leetcode"));
        Assert.assertEquals(false, detectCapitalUse("leetcodE"));
    }
}
